﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Serialization;

namespace ERPStore.Models
{
	/// <summary>
	/// Statistiques additionnelle liée aux produit
	/// </summary>
	[DataContract]
	public class ProductStats
	{
		public ProductStats()
		{

		}

		/// <summary>
		/// Identifiant interne du produit
		/// </summary>
		[DataMember]
		public int ProductId { get; set; }

		/// <summary>
		/// Nombre de commande du produit sur un an glissant.
		/// </summary>
		/// <value>The order count.</value>
		[DataMember]
		public int? OrderCount { get; set; }

		/// <summary>
		/// Nombre de ligne de commande du produit sur un an glissant
		/// </summary>
		[DataMember]
		public int? OrderItemCount { get; set; }
		/// <summary>
		/// Nombre de client distincts ayant commandés ce produit sur un an glissant.
		/// </summary>
		/// <value>The distinct customer count.</value>
		[DataMember]
		public int? DistinctCustomerCount { get; set; }
		/// <summary>
		/// Nombre de visiteur sur la fiche produit sur un mois glissant.
		/// </summary>
		/// <value>The visitor count.</value>
		[DataMember]
		public int? VisitorCount { get; set; }
		/// <summary>
		/// Montant total de vente sur un an glissant
		/// </summary>
		/// <value>The sale total.</value>
		[DataMember]
		public decimal? SaleTotal { get; set; }
		/// <summary>
		/// Dernier prix de vente connu
		/// </summary>
		[DataMember]
		public decimal? LastSalePrice { get; set; }
		/// <summary>
		/// Dernière date de vente
		/// </summary>
		[DataMember]
		public DateTime? LastSaleDate { get; set; }
		/// <summary>
		/// Nombre de jours depuis la dernière vente
		/// </summary>
		[DataMember]
		public int? DayCountSinceLastSale 
		{
			get
			{
				if (LastSaleDate.HasValue)
				{
					return Math.Max(0,Convert.ToInt32((DateTime.Today - LastSaleDate.Value).TotalDays));
				}
				return null;
			}
			set { } // For serialization only
		}

		/// <summary>
		/// Taux de vente, plus il est proche de 0 plus le produit est un best seller
		/// </summary>
		[DataMember]
		public decimal? SaleRate { get; set; }

		/// <summary>
		/// Nombre de jours moyens entre 2 ventes
		/// </summary>
		[DataMember]
		public int? AverageOfDayCountBeweenSales { get; set; }
	}
}
